//导入常量
import {INCREMENT} from '@/store/mutations-type'

export default {
  /*
    Vuex的store状态的更新唯一方式: 提交Mutation
    默认有一个参数为state,即上面的state对象
    调用时可以携带一些额外的参数,如果参数不是一个,则通常会以对象的形式传递
    在mutation中,如果定义了很多事件类型(也就是其中的方法名称),在调用时可能会出错
    所以推荐使用常量替代Mutation事件的类型
   */
  [INCREMENT](state){ //方法名使用的是导入的常量,好处在于调用该方法时也可以使用该常量,防止手写发生错误,推荐使用这种方式
    state.counter++
  },
  decrement(state){
    state.counter--
  },
  //可以同时定义参数,在由commit调用时同时传入
  incrCount(state,count){
    // 1、普通的提交风格参数就是count
    // state.counter += count

    // 2、特殊的提交风格参数是一个对象
    console.log(count)
    state.counter += count.count
  },
  //如果参数不是一个,则通常会以对象的形式传递
  addStudent(state,stu){
    state.students.push(stu)
  },
  updateInfo(state){
    // Vuex的store中的state是响应式的,当state中的数据发生改变时,Vue组件会自动更新,前提是在store中初始化好所需的属性
    state.info.name = '苏州大学'
    
    // 后添加的属性是不会添加到响应式系统中的,所以无法在界面上实时响应
    // state.info['address'] = '洛杉矶'

    // 如果确实需要新添加的属性是响应式的,可以使用Vue提供的方法
    // Vue.set(state.info, 'address', '洛杉矶')

    // 当需要删除对象中的属性时,该方式做不到响应式
    // delete state.info.age

    // 当需要删除对象中的属性时,如果需要做到响应式,可以使用Vue提供的方法
    // Vue.delete(state.info,'age')
  }
}